/*
    1 后端返回的数据都是字符串(json格式)
      我们可以通过调试工具的 NetWork -> Response
      网络面板看到原始的返回数据

    2 我们在项目中使用 axios 发出的请求
      axios 为了方便,它会在内部把原始的 JSOn 格式字符串转为 javascript 对象给你使用

    解决思路:

    Axios 会在内部使用 JSON.parse 把后端返回的数据转换为 javascript 数据对象

    所以解决思路就是: 不用让 axios 使用 JSON.parse 来转换这个数据,而是使用 json-bigint 来做转换处理

    axios 提供了一个 API:  transformResponse 方法

    import jsonbigint from 'json-bigint'
    const request = axios.create({
       // `transformResponse` allows changes to the response data to be made before
        // it is passed to then/catch
        // 定义后端返回的原始数据的处理
        // 参数 data 就是后端返回的原始数据(未经处理的 JSON 格式数据)
        transformResponse: [function (data) {
          // Do whatever you want to transform the data
          // 后端返回的数据可能不是 JSON 格式字符串
          // 如果不是的话, name JSONbig.parse 调用就会报错
          // 所以我们使用 try-catch 来捕获异常, 处理异常的发生
          try {
            // 如果转换成功,则直接把结果返回
            return jsonbigint.parse(data)
          }catch(err){
            // 如果转换失败,则进入这里
            // 我们在这里把数据原封不动的直接返回给请求使用
            return data;
          }
        }],
    })

*/




import jsonbigint from 'json-bigint'
// 1253585734669959168 演示数据

let str = '{"id": 1253585734669959168 }'

// 它会把超出 JS 安全整数范围的数字转化为一种类型为 BigNumber 类型的对象
// 我们在使用的时候需要把这个 BigNumber.toString 方法就能得到原来正确的数据了

console.log(jsonbigint.parse(str)) // {id: BigNumber} id: BigNumber {s: 1, e: 18, c: Array(2)}
// console.log(jsonbigint.parse(str).id.toString())
console.log(JSON.parse(str)) // {id: 1253585734669959200}

let data = jsonbigint.parse(str)
console.log(jsonbigint.stringify(data)) // {"id":1253585734669959168} 反转换成功
console.log(JSON.stringify(data)) // {"id":"1253585734669959168"} 反转换多了一对引号
